home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / internal / DefaultEntityHandler.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  5.3 KB  |  222 lines

  1. package com.ibm.xml.internal;
  2.  
  3. import com.ibm.xml.framework.ChunkyByteArray;
  4. import com.ibm.xml.framework.ParserState;
  5. import com.ibm.xml.framework.StringPool;
  6. import com.ibm.xml.framework.XMLDeclRecognizer;
  7. import com.ibm.xml.framework.XMLEntityHandler;
  8. import com.ibm.xml.framework.XMLReader;
  9. import java.io.File;
  10. import java.io.InputStream;
  11. import java.io.InputStreamReader;
  12. import java.net.MalformedURLException;
  13. import java.net.URL;
  14. import java.util.Stack;
  15. import org.xml.sax.EntityResolver;
  16. import org.xml.sax.InputSource;
  17.  
  18. public final class DefaultEntityHandler implements XMLEntityHandler {
  19.    private static final boolean DEBUG = false;
  20.    private Stack fRecognizers;
  21.    private Stack fInputSourceStack;
  22.    private ParserState fParserState;
  23.    private EntityResolver fResolver;
  24.  
  25.    public DefaultEntityHandler(ParserState var1) {
  26.       this.fParserState = var1;
  27.       this.fInputSourceStack = new Stack();
  28.       this.initializeRecognizers();
  29.    }
  30.  
  31.    public void reset(ParserState var1) {
  32.       this.fParserState = var1;
  33.       this.fInputSourceStack.removeAllElements();
  34.    }
  35.  
  36.    public void addRecognizer(XMLDeclRecognizer var1) {
  37.       this.fRecognizers.push(var1);
  38.    }
  39.  
  40.    public void setEntityResolver(EntityResolver var1) {
  41.       this.fResolver = var1;
  42.    }
  43.  
  44.    public EntityResolver getEntityResolver() {
  45.       return this.fResolver;
  46.    }
  47.  
  48.    public InputSource resolveEntity(int var1, int var2) throws Exception {
  49.       EntityResolver var3 = this.fResolver;
  50.       if (var3 != null) {
  51.          StringPool var4 = this.fParserState.getStringPool();
  52.          String var5 = var4.toString(var1);
  53.          String var6 = var4.toString(var2);
  54.          return var3.resolveEntity(var5, var6);
  55.       } else {
  56.          return null;
  57.       }
  58.    }
  59.  
  60.    public int expandSystemId(int var1) {
  61.       if (var1 != -1) {
  62.          ParserState var2 = this.fParserState;
  63.          StringPool var3 = var2.getStringPool();
  64.  
  65.          try {
  66.             String var4 = var3.toString(var1);
  67.             URL var5 = this.expandSystemId(var4);
  68.             if (var5 != null) {
  69.                return var3.addString(var5.toString());
  70.             }
  71.          } catch (Exception var6) {
  72.          }
  73.       }
  74.  
  75.       return var1;
  76.    }
  77.  
  78.    public XMLReader createReader(InputSource var1, boolean var2) throws Exception {
  79.       if (var1.getCharacterStream() != null) {
  80.          return new CharReader(this.fParserState, var1.getPublicId(), var1.getSystemId(), var1.getCharacterStream());
  81.       } else if (var1.getEncoding() != null && var1.getByteStream() != null) {
  82.          return new CharReader(this.fParserState, var1.getPublicId(), var1.getSystemId(), new InputStreamReader(var1.getByteStream(), var1.getEncoding()));
  83.       } else {
  84.          InputStream var3 = var1.getByteStream();
  85.          if (var3 == null) {
  86.             try {
  87.                String var4 = var1.getSystemId();
  88.                if (var4 != null) {
  89.                   try {
  90.                      ParserState var5 = this.fParserState;
  91.                      StringPool var6 = var5.getStringPool();
  92.                      int var7 = var6.addString(var4);
  93.                      int var8 = var5.getEntityHandler().expandSystemId(var7);
  94.                      if (var7 != var8) {
  95.                         var4 = var6.orphanString(var8);
  96.                         var1.setSystemId(var4);
  97.                      }
  98.  
  99.                      var6.releaseString(var7);
  100.                   } catch (Exception var9) {
  101.                   }
  102.                }
  103.  
  104.                URL var12 = new URL(var4);
  105.                var3 = var12.openStream();
  106.             } catch (Exception var10) {
  107.                throw var10;
  108.             }
  109.          }
  110.  
  111.          ChunkyByteArray var11 = new ChunkyByteArray(var3);
  112.          Object var13 = this.callRecognizers(var1, var2, var11);
  113.          if (var13 == null) {
  114.             ParserState var14 = this.fParserState;
  115.             if (true) {
  116.                var13 = new UTF8CharReader(this.fParserState, var1.getPublicId(), var1.getSystemId(), var11);
  117.             } else {
  118.                var13 = new UTF8Reader(this.fParserState, var1.getPublicId(), var1.getSystemId(), var11);
  119.             }
  120.          }
  121.  
  122.          return (XMLReader)var13;
  123.       }
  124.    }
  125.  
  126.    public void startInputSource(InputSource var1) {
  127.       this.fInputSourceStack.push(var1);
  128.    }
  129.  
  130.    public void endInputSource(InputSource var1) {
  131.       InputSource var2 = (InputSource)this.fInputSourceStack.pop();
  132.       if (var2 != var1) {
  133.          try {
  134.             this.fParserState.getErrorHandler().error(170);
  135.          } catch (Exception var3) {
  136.          }
  137.       }
  138.    }
  139.  
  140.    public URL expandSystemId(String var1) throws Exception {
  141.       if (var1 == null) {
  142.          var1 = "/";
  143.       }
  144.  
  145.       try {
  146.          URL var2 = new URL(var1);
  147.          if (var2 != null) {
  148.             return null;
  149.          }
  150.       } catch (MalformedURLException var7) {
  151.       }
  152.  
  153.       var1 = fixURI(var1);
  154.  
  155.       String var9;
  156.       try {
  157.          InputSource var3 = (InputSource)this.fInputSourceStack.peek();
  158.          var9 = var3.getSystemId();
  159.       } catch (Exception var6) {
  160.          var9 = null;
  161.       }
  162.  
  163.       Object var10 = null;
  164.       URL var11;
  165.       if (var9 == null) {
  166.          String var4;
  167.          try {
  168.             var4 = fixURI(System.getProperty("user.dir"));
  169.          } catch (SecurityException var5) {
  170.             var4 = "";
  171.          }
  172.  
  173.          if (!var4.endsWith("/")) {
  174.             var4 = var4 + "/";
  175.          }
  176.  
  177.          var11 = new URL("file", "", var4);
  178.       } else {
  179.          var11 = new URL(var9);
  180.       }
  181.  
  182.       return new URL(var11, var1);
  183.    }
  184.  
  185.    private void initializeRecognizers() {
  186.       if (this.fRecognizers == null) {
  187.          this.fRecognizers = new Stack();
  188.          this.fRecognizers.push(new EBCDICRecognizer());
  189.          this.fRecognizers.push(new UCSRecognizer());
  190.          this.fRecognizers.push(new UTF8Recognizer());
  191.       }
  192.  
  193.    }
  194.  
  195.    private XMLReader callRecognizers(InputSource var1, boolean var2, ChunkyByteArray var3) throws Exception {
  196.       for(int var4 = this.fRecognizers.size() - 1; var4 >= 0; --var4) {
  197.          XMLDeclRecognizer var5 = (XMLDeclRecognizer)this.fRecognizers.elementAt(var4);
  198.          XMLReader var6 = var5.recognize(this.fParserState, var1, var3, var2);
  199.          if (var6 != null) {
  200.             return var6;
  201.          }
  202.       }
  203.  
  204.       return null;
  205.    }
  206.  
  207.    private static String fixURI(String var0) {
  208.       var0 = var0.replace(File.separatorChar, '/');
  209.       if (var0.length() >= 2) {
  210.          char var1 = var0.charAt(1);
  211.          if (var1 == ':') {
  212.             char var2 = Character.toUpperCase(var0.charAt(0));
  213.             if (var2 >= 'A' && var2 <= 'Z') {
  214.                var0 = "/" + var0;
  215.             }
  216.          }
  217.       }
  218.  
  219.       return var0;
  220.    }
  221. }
  222.